#pragma once
#include <QObject>
#include <QString>
#include <QColor>
#include <QFont>
#include <QMap>

/**
 * @brief 语法高亮主题管理器
 * 
 * 该类专门管理代码编辑器的语法高亮配色方案，与UI主题完全独立。
 * UI主题由 StyleSet 类管理，两者互不影响。
 */

// 语法高亮主题ID
enum SyntaxThemeId {
    SYNTAX_LIGHT = 0,      // 亮色语法主题
    SYNTAX_DARK = 1,       // 暗色语法主题
    SYNTAX_SOLARIZED = 2,  // Solarized 主题
    SYNTAX_MONOKAI = 3,    // Monokai 主题
    SYNTAX_DRACULA = 4,    // Dracula 主题
    SYNTAX_MAX,            // 主题数量
};

class SyntaxThemeManager : public QObject
{
    Q_OBJECT

public:
    static SyntaxThemeManager* instance();
    ~SyntaxThemeManager();

    // 主题管理
    void setSyntaxTheme(int themeId);
    int getCurrentSyntaxTheme() const { return m_currentThemeId; }
    QString getSyntaxThemeName(int themeId) const;
    QString getCurrentSyntaxThemeName() const;
    
    // 主题信息
    bool isDarkSyntaxTheme(int themeId) const;
    bool isCurrentDarkSyntaxTheme() const;
    
    // 应用主题
    void applyCurrentTheme();
    void loadThemeFromSettings();
    void saveThemeToSettings();
    
    // 获取主题颜色（用于词法分析器）
    QColor getThemeColor(int themeId, const QString& role) const;
    QColor getCurrentThemeColor(const QString& role) const;
    
    // 将亮色主题的颜色映射到当前主题的对应颜色
    QColor mapLightColorToCurrentTheme(const QColor& lightColor) const;
    
signals:
    void syntaxThemeChanged(int themeId);

private:
    explicit SyntaxThemeManager(QObject *parent = nullptr);
    SyntaxThemeManager(const SyntaxThemeManager&) = delete;
    SyntaxThemeManager& operator=(const SyntaxThemeManager&) = delete;
    
    void initThemes();
    void initLightTheme();
    void initDarkTheme();
    void initSolarizedTheme();
    void initMonokaiTheme();
    void initDraculaTheme();
    void applyEditorGlobalStyle(int themeId);
    
    static SyntaxThemeManager* s_instance;
    int m_currentThemeId;
    
    // 主题配色存储（themeId -> role -> color）
    QMap<int, QMap<QString, QColor>> m_themeColors;
};

